Schema 完成後就可以開始把邏輯部分補完
這個主題也沒有太複雜的邏輯
主要只是將資料寫入資料庫以及針對查詢參數查詢出正確的資料
直接將前端傳過來的資訊存入資料庫即可
可以看到狀態並不是由前端設定的,而是直接由後端給一個固定值,這是因為我們定義只要一創建Task,他的狀態一定會是 WAITING
其餘的一些值則是使用 DB 預設值,這部分直接在 Model 設定
createTask(taskData: TaskInput) {
const newTask = new this.taskModel({ ...taskData, status: 'WAITING'});
return newTask.save();
}
mongoose 提供了方便的函式 findByIdAndUpdate ,給予 id 能直接更新該筆資料
findByIdAndUpdate 回傳的預設值是還未更新的資料,所以如果想回傳更新後的資料就給 { new: true } 參數
updateTask(_id: String, args: UpdateTaskArgs) {
return this.taskModel.findByIdAndUpdate(_id, {
...args,
updatedAt: new Date
}, { new: true });
}
由於查詢參數不是固定的,所以我們用串接的方式來做查詢
當前端有針對 Status 做過濾時,我們才將 Status 放進查詢中
否則其餘都是預設的查詢結果
skip 以及 limit 是分頁查詢,在 Model 中有給予預設值,避免後續前端沒有給分頁查詢,造成資料庫太大的查詢負擔
queryTasks(args: TaskArgs, status: TaskStatus) {
const tasks = this.taskModel.find()
.where('active').equals(true)
.sort('createdAt')
.skip(args.start)
.limit(args.pageSize);
if (status) {
tasks.where('status').equals(status)
}
return tasks.exec();
}
完成後就能在 Playground 執行
Create Task 成功後也能在資料庫看到寫入結果